package com.coolrui.domain.user.service;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import com.coolrui.common.system.ApiList;
import com.coolrui.common.utils.MockDataUtils;
import com.coolrui.domain.user.entity.UserAccount;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

@Service
@Slf4j
public class UserHandleService {
    @Autowired
    private UserDomainService userDomainService;
    @Autowired
    private MockDataUtils mockDataUtils;

    /**
     * 获取模拟创建用户数据
     * @return 用户实体数据
     */
    public UserAccount getMockUser() {
        int sex = mockDataUtils.getNum(1, 2);//1男2女
        String name = mockDataUtils.getName(sex);//指定性别的中文姓名

        UserAccount user = new UserAccount();
        user.setUserId(IdUtil.getSnowflakeNextId());
        user.setGender(sex);
        user.setAge(RandomUtil.randomInt(22, 50));//年龄，生成随机数22-50
        user.setName(name);
        user.setCityId(mockDataUtils.getCityId());
        user.setMobile(mockDataUtils.getMobile());
        user.setAddress(mockDataUtils.getAddress());
        return user;
    }

    /**
     * 获取用户
     * @param userId 用户ID
     * @return 用户实体数据
     */
    public UserAccount getUser(Long userId) {
        return userDomainService.getUser(userId);
    }

    /**
     * 分页获取用户列表
     * @param page 页码
     * @param pageSize 每页条数
     * @return 用户列表
     */
    public List<UserAccount> getUserList(Integer page, Integer pageSize) {
        return userDomainService.getUserList(page, pageSize);
    }


    /**
     * 按城市ID分页获取用户列表-API接口格式
     * @param cityId 城市ID（传入0表示查询全部城市）
     * @param page 页码
     * @param pageSize 每页条数
     * @return 用户列表
     */
    public ApiList<UserAccount> getUserList(Long cityId, int page, int pageSize){
        return userDomainService.getUserList(cityId, page, pageSize);
    }


    /**
     * 执行创建用户
     *
     * @param user 用户实体数据
     * @return 用户实体数据
     */
    public int createUser(UserAccount user) {
        //填充默认字段
        user.setTotalBalance(new BigDecimal("0.00"));
        user.setAvailableBalance(new BigDecimal("0.00"));
        user.setFrozenBalance(new BigDecimal("0.00"));
        user.setCreateTime(DateUtil.date());
        user.setUpdateTime(DateUtil.date());
        return userDomainService.createUser(user);
    }
}